package com.cqk.bigdata.redis;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import redis.clients.jedis.JedisPoolConfig;


/**
 * @author: cqk
 * @date: 2018/3/29 15:45
 * redis工具类
 * 单例模式
*/
public class JedisUtil {
    protected static Logger logger = LoggerFactory.getLogger(JedisUtil.class);
    private static final String HOST = "127.0.0.1";
    private static final int PORT =6379;
    /**
     * 私有的构造方法
    */
    private JedisUtil(){

    }
    private volatile static JedisPool jedisPool = null;
    /**
     * 初始化jedispPool
     */
    private static void initJedisPool(){
        JedisPoolConfig jedisPoolConfig = new JedisPoolConfig();
        //指定线程空闲连接最大连接数
        jedisPoolConfig.setMaxIdle(200);
        //连接池创建最大连接数
        jedisPoolConfig.setMaxTotal(500);
        //设置创建连接的超时时间
        jedisPoolConfig.setMaxWaitMillis(1000*30);
        //获取链接时判断连接是否可用
        jedisPoolConfig.setTestOnBorrow(true);
        jedisPool=new JedisPool(jedisPoolConfig,HOST,PORT);

    }
    /**
     * 同步获取jedis实例
     */
    public static Jedis getJedis(){
         if (jedisPool ==null){
             synchronized (JedisPool.class){
                 if (jedisPool ==null){
                     initJedisPool();
                 }
             }
         }
         Jedis jedis =null;
         try{
             if(jedisPool!=null){
                 jedis = jedisPool.getResource();
             }
         }catch (Exception e){
             logger.error("获取jedis出错： "+e);
         }finally {
             returnSource (jedis);
         }

         return  jedis;
    }

    /**
     * 释放jedis资源
     * @param jedis
     */
    public static void returnSource(Jedis jedis){
        if (jedis!=null&& jedisPool!=null){
            jedis.close();
        }
    }

}
